package com.iwhalecloud.citybrain.flow.platform.manager.domain.repository;


import java.util.List;
import java.util.Map;

import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.FlowNoticeTemplateParameterVo;
import com.iwhalecloud.citybrain.flow.platform.manager.common.ResponseResult;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.notice.*;

/**
 * 通知模板Service
 *
 * @author wuliepeng
 * @date 2019-07-11
 */
public interface FlowNoticeTemplateRepository {

    /**
     * 查询通知模板列表
     *
     * @param flowNoticeTemplateQueryVo
     * @return
     */
    ResponseResult list(FlowNoticeTemplateQueryVo flowNoticeTemplateQueryVo);
    /**
     * 根据模板类型查询模板列表
     *
     * @param type
     * @return
     */
    List<FlowNoticeTemplateVo> getTemplateListByType(String type);

    /**
     * 依据消息类型获取消息模版
     *
     * @param type
     * @return
     */
    List<FlowNoticeTemplateInfo> listNoticeTemplateInfo(String type);

    /**
     * 查询该通知类型的模板是否存在
     *
     * @param noticeType
     * @return
     */
    Boolean isTemplateExist(String noticeType);
    /**
     * 查询该通知类型的模板是否存在update校验使用
     *
     * @param noticeType
     * @return
     */
    Boolean isTemplateExist(String noticeType,Long id);

    /**
     * 新建通知模板
     *
     * @param flowNoticeTemplateAddVo
     * @return
     */
    Long insert(FlowNoticeTemplateAddVo flowNoticeTemplateAddVo);

    /**
     * 编辑通知模板
     *
     * @param flowNoticeTemplateUpdateVo
     * @return
     */
    Integer update(FlowNoticeTemplateUpdateVo flowNoticeTemplateUpdateVo);

    /**
     * 删除通知模板
     *
     * @param flowNoticeTemplateDeleteVo
     * @return
     */
    Integer delete(FlowNoticeTemplateDeleteVo flowNoticeTemplateDeleteVo);

    /**
     * 获取通知模板参数列表
     *
     * @return
     */
    List<FlowNoticeTemplateParameterVo> listNoticeTemplateParameter(String type);

    /**
     * 获取通知模板类型列表
     *
     * @return
     */
    List<Map<String, String>> listNoticeTemplateType();

    /**
     * 重发通知消息
     *
     * @param ruNoticeChannelId
     * @return Y-发送成功 N-发送失败
     */
    String reSendNoticeMessage(String ruNoticeChannelId);

    /**
     * 模板详情
     *
     * @param flowNoticeTemplateDetailVo
     * @return
     */
    ResponseResult detail(FlowNoticeTemplateDetailVo flowNoticeTemplateDetailVo);


    /**
     * 模板启动
     *
     * @param flowNoticeTemplateStatusVo
     * @return
     */
    Integer startStatus(FlowNoticeTemplateStatusVo flowNoticeTemplateStatusVo);


    Integer updateSendStatus(String ruNoticeChannelId);

}
